package Domein;

import java.io.*;
import java.util.*;

/**
 *
 * @author Tim
 */
public class Database implements Serializable {

    private static final long serialsVersionUID = 1L;
    private final String locatie = "src/Saves/";

    /**
     *
     */
    public Database() {

    }

    /**
     *
     * @return
     */
    public ArrayList<String> getDirInhoud() {
        File dir = new File(locatie);
        String dirItems[] = dir.list();
        ArrayList<String> items = new ArrayList<String>();
        if(dirItems == null) {
            System.err.println("Direcotory bestaat niet!");
        } else {
            for(int i = 0;i<dirItems.length;i++) {
                File item = new File(dirItems[i]);
                if(!item.isDirectory()) {
                    if(item.getName().contains(".tjg")) {
                        System.out.println("Bestand: " + item.getName());
                        items.add(item.getName());
                    }
                }
            }
        }
        return items;
    }

    /**
     *
     * @param naam
     * @return
     */
    public boolean vindSpeler(String naam) {
        if(naam.trim().equals("")) {
            return false;
        } else {
            File dir = new File(locatie);
            String dirItems[] = dir.list();
            if(dirItems == null) {
                return false;
            } else {
                for(int i = 0;i<dirItems.length;i++) {
                    File item = new File(dirItems[i]);
                    if(!item.isDirectory()) {
                        if(item.getName().equals(naam+".tjg")) {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }

    /**
     *
     * @param speler
     * @throws java.lang.Exception
     */
    public void spelerOpslaan(Speler speler) throws Exception {
        if(speler == null) {
            throw new Exception("Database: Speler object bestaat niet!");
        } else {
            ObjectOutputStream oos = null;
            File spelerBestand = new File(locatie + speler.getGebruikersnaam().toLowerCase().trim() + ".tjg");

            if(!spelerBestand.exists()) {
                spelerBestand.createNewFile();
            }else{
                spelerBestand.delete();
                spelerBestand.createNewFile();
            }
            try {
                oos = new ObjectOutputStream(new FileOutputStream(spelerBestand));
                oos.writeObject(speler);
                System.out.println("Database: " + speler.getGebruikersnaam() + " is opgeslagen");
            } catch (FileNotFoundException ex) {
                throw new Exception("Database: " + speler.getGebruikersnaam() + " bestaat niet!");
            } catch (IOException ex) {
                throw new Exception("Database: Kan het bestand '" + spelerBestand.getName() + "' niet aanmaken!");
            } catch (Exception ex) {
                
            }
        }
    }

    /**
     *
     * @param spelerNaam
     * @return
     * @throws java.lang.Exception
     */
    public Speler spelerOpenen(String spelerNaam) throws Exception {
        File spelerBestand = new File(locatie+spelerNaam.toString().toLowerCase()+ ".tjg");
        ObjectInputStream ios = null;
        if(spelerBestand.isFile()) {
            try {
                ios = new ObjectInputStream(new FileInputStream(spelerBestand));
                return (Speler) ios.readObject();
            } catch (ClassNotFoundException ex) {
                throw new Exception("Database: Speler Class niet gevonden!");
            } catch(FileNotFoundException ex) {
                throw new Exception("Database: " + spelerNaam + " bestaat niet!");
            } catch (IOException ex) {
                throw new Exception("Database: open IOError");
            }
        } else {
            System.err.println("Database: " + spelerNaam + " bestaat niet!");
        }
        return null;
    }

}
